#include "linklist.h"

// 初始化一个不带头节点的单循环链表
list init_list()
{
    return NULL;
}

// 申请新节点
list new_node(int num)
{
    list new = calloc(1, sizeof(node));
    if(new != NULL)
    {
        new->data = num;
        new->next = new;
    }
    return new;
}

bool is_empty(list head)
{
    return head == NULL;
}

// 尾插法添加节点，返回新的链表头指针
list add_list_tail(list head, list newnode)
{
    if(is_empty(head))
        return newnode;

    // 找到链表的末尾节点
    list tail;
    for(tail=head; tail->next!=head; tail=tail->next);
    tail->next = newnode;
    newnode->next = head;

    return head;
}

// 遍历单循环链表
void show(list head)
{
    if(is_empty(head))
        return;

    list p;
    for(p=head; p->next!=head; p=p->next)
        printf("%d\t", p->data);

    // 输出最后一个元素
    printf("%d\n", p->data);
}

// 将p指向的节点，从单循环链表中剔除
// 返回剔除的节点的下一个节点指针
list remove_node(list p)
{
    if(p == NULL)
        return NULL;

    // 1
    list k;
    for(k=p; k->next!=p; k=k->next);

    // 2
    k->next = p->next;

    // 3
    p->next = NULL;

    return k->next;
}